'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.05
 * lastUpdateDate：2018.02.05
 * description：类型化数组的原理初步认识
 */
/**
 * 类型化数组主要用来操作二进制数据的，传统的Javascript是没办法实现的
 * 位数越高，能存储的范围就越大
 * 有符号的，如下：
 * Int8Array = 1byte 范围 -2^(8 - 1)~2^(8 - 1) - 1 ---> -128~127
 * Int16Array = 2byte 范围 -2^(16 - 1)~2^(16 - 1) - 1 ---> -32768~32767
 * Int32Array = 4byte 范围 -2^(32 - 1)~2^(32 - 1) - 1 ---> -2147483648~2147483647
 * Float64Array = 8byte 范围 -2^(64 - 1)~2^(64 - 1) - 1 ---> -9.223372036854776e18~9.223372036854776e18
 ************************--------------*************************
 * 无符号的，如下：
 * Uint8Array = 1byte 范围 0~2^8 - 1 ---> 0~255
 * Uint16Array = 2byte 范围 0～2^16 - 1 ---> 0~65535
 * Uint32Array = 4byte 范围 0～2^32 - 1 ---> 0~4294967295
 * Float64Array = 8byte 范围 0～2^64 - 1 ---> 0~1.844674407370955e19
 */
let buffer = new ArrayBuffer(32);
/**
 * 它们内部操作的内存地址都是同一个，区别在于一个是8位无符号的，一个是16位的，
 * 一个是32位的，最后一个是64位的，它们存储的空间大小不一样 start
 */
let arr = new Uint8Array(buffer);
// result：32
// console.log(arr.length);
arr[0] = 0;
arr[31] = 255;
console.log(arr);

let arr2 = new Uint16Array(buffer);
// result：16
// console.log(arr2.length);
arr2[0] = 0;
arr2[15] = 65535;
console.log(arr2);

let arr3 = new Uint32Array(buffer);
// result：8
// console.log(arr3.length);
arr3[0] = 0;
arr3[7] = 4294967295;
console.log(arr3);

let arr4 = new Float64Array(buffer);
// result：4
// console.log(arr4.length);
arr4[0] = 0;
arr4[3] = 1.844674407370955e19;
console.log(arr4);
/**
 * 它们内部操作的内存地址都是同一个，区别在于一个是8位无符号的，一个是16位的，
 * 一个是32位的，最后一个是64位的，它们存储的空间大小不一样 end
 */
